package com.aiwiown.snackmq.api;

import com.aiwiown.snackmq.common.message.Message;

/**
 * 本地事务执行器接口。
 * <p>
 * 当生产者成功发送半消息（Prepare Message）后，SnackMQ 客户端会回调此接口的
 * {@code executeLocalTransaction} 方法，以执行业务方定义的本地事务。
 * </p>
 */
public interface LocalTransactionExecutor {

    /**
     * 执行本地事务。
     *
     * @param msg 生产者发送的原始消息。
     * @param arg 业务方在调用 `sendMessageInTransaction` 时传入的自定义参数，可用于传递业务上下文。
     * @return 本地事务的最终状态 (COMMITTED, ROLLED_BACK, or UNKNOWN)。
     */
    TransactionState executeLocalTransaction(Message msg, Object arg);
}